﻿<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Insert extends Controller {

	public $template = 'insert';
	protected $data = array(
		'account' => NULL
	);
	
	// Функция которая всегда запускается перед запуском action
	// В нее мы вешаем авторизацию, тогда она будет работать для всех екшеном текущего класса
	public function before()
	{
	
		if (!isset($_SERVER['PHP_AUTH_USER'])) {
			header('WWW-Authenticate: Basic realm="'.__('OSMP Terminal Server').'"');
			header('HTTP/1.0 401 Unauthorized');
			exit;
		} else {
			// Проверяем логин и пароль с задаными в каком то месте
			if( ! Model_Auth::check_terminal($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
			{
				// И обращаемся обратно к этому методу, чтобы попытаться повторно авторизовать
				return $this->before();
			}
		}
	}

	public function action_index()
	{
		if($this->request->param('id') === NULL)
		{
			return $this->action_view();
		}
		
		// Создаем новый VIEW и привязываем к шаблону
		$this->template = View::factory($this->template);
		
		// Устанавливае статус 90 "Проведение платежа не окончено"
		$this->template->result = "90";
	
		// тут мы как бе создаем новую модель для новой записи в БД
		$payment = new Model_Payment;
		
		//Стандартные поля для всех операторов
		$fields = array('id_oper', 'command', 'txn_id', 'account', 'sum');

		// Прогоняем поля в цикле и смотрим есть ли оно в GET, если есть добавляем и удаляем его из GET, чтобы не попало в параметры
		foreach($fields as $param)
		{
			if(isset($_GET[$param]))
			{
				$payment->$param = $_GET[$param];
				
				//Сохраняем в локальный массив переменные
				$this->data[$param] = $_GET[$param];
				unset($_GET[$param]);
			}
		}
		
		// Если номер транзакции уже есть в БД
		if(ORM::factory('payment')->exist($this->data['txn_id']))
		{
			// 300 Другая ошибка провайдера +
			$this->template->result = "300";
			$this->template->comment = __("Transaction id: :id exist", array(':id' => $this->data['txn_id']));

			Model_Auth::log_operation('Error 300', 'Transaction id: '.$this->data['txn_id'].' exist');
			
			// Рендерим шаблон
			return $this->render();
		}
		
		// Если не передан идентификатора абонента
		if($this->data['account'] === NULL)
		{
			// 4 Неверный формат идентификатора абонента
			$this->template->result = "4";
			
			Model_Auth::log_operation('Error 4', 'Missing accaunt parameter');
			
			// Рендерим шаблон
			return $this->render();
		}

		// ID оператора и время проведения платежа заполняем отдельно  
		$payment->id_oper = $this->request->param('id');
		$payment->date = date('Y-m-d H:i:s'); 
		
		// Генерируем массив для последующей сериализации + конвертируем русские симнволы
		$params = array();
		foreach($_GET as $param => $value)
		{
			$params[$param] = iconv('cp1251', 'utf-8', $value);
		}

		// Send params
		$payment->params = serialize($params);
		
		
		if($payment->save())
		{
			Model_Auth::log_operation('Error 0', 'Row '.$payment->id.' insert');
			
			// 0 ОК
			$this->template->result = "0";
			
			// Рендерим шаблон
			return $this->render();
		}
		else
		{
			Model_Auth::log_operation('Error 1', 'Row '.$payment->id.' not insert');
			
			// 1 Временная ошибка. Повторите запрос позже
			$this->template->result = "1";
			
			// Рендерим шаблон
			return $this->render();
		}
	}
	
	public function action_delete($id = NULL)
	{
		if($id == NULL)
		{
			//nothing
		} 
		else if ($id == 'all') 
		{
			ORM::factory('payment')->delete_all();
		} 
		else if (stripos($id, '-') !== FALSE) 
		{
			$range = explode('-', $id);
			foreach(range($range[0], $range[1]) as $id)
			{
				ORM::factory('payment')->delete($id);
			}
		} 
		else 
		{
			ORM::factory('payment')->delete($id);
		}
		
		$this->request->redirect('/');
	}
	
	protected function render()
	{
		$this->template->text = $this->data['txn_id'];
		$this->request->headers['Content-Type'] = 'application/xml; charset='.Kohana::$charset;
		$this->request->response = $this->template;
	}
}